home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Ian & Stuart's Australian Mac 1
/
Ian and Stuart's One (Australia).iso
/
Mac FAQs
/
FOXPro faq
< prev
next >
Wrap
Text File
|
1994-11-17
|
61KB
|
1,605 lines
Archive-name: databases/foxpro/general
Posting-frequency: monthly
[This is FAQ version 1.0.1.2 - Last Updated 10/27/94. New sections or
altered text are marked with ">" in the left hand column. Please send
all questions, comments, and whatnot to kcochran@nyx.cs.du.edu]
Welcome to comp.databases.xbase.fox. This message is posted monthly,
and can be found here, in news.answers, or you can receive a copy of
this or any of the other comp.database.xbase.fox FAQ's by e-mailing me at
kcochran@nyx.cs.du.edu.
This FAQ is available for anonymous FTP from rtfm.mit.edu. For more
information about the FAQ archive at rtfm.mit.edu, consult the newsgroup
news.announce.newusers.
This FAQ is also available for anonymous FTP from rahul.net These
files are compressed, and located in the /pub/coneill directory.
***WARNING*** The FAQ's at rahul.net may or may not be the most current
versions, depending on exactly which day I send them in, and which
day you pick them up.
>Note that the ftp site on rahul.net has gone away. This information
>is mirrored at lenti.med.umn.edu:/pub/foxpro, which will continue for
>the indefinite future.
This message is split into the following sections:
0.0 - What is an FAQ?
0.1 - What is comp.databases.xbase.fox?
0.2 - What is FoxPro?
0.2.1 - What are FoxBase, FoxBase+, and the rest?
0.3 - How do I get information?
0.3.1 - What other FAQ's are available?
1.0 - I just bought FoxPro; now what?
1.1 - The FoxPro books.
1.2 - Third-Party books.
1.3 - Database and FoxPro magazines.
1.4 - MicroSoft technical support.
1.5 - FTP locations.
1.6 - Other locations for information.
2.0 - What are the parts of FoxPro?
2.1 - The Developers kit.
2.2 - The Distribution kit.
2.3 - The Library Construction kit.
2.4 - The Connectivity kit.
2.5 - FoxPro 2.6 "Standard Edition"/"Professional Edition"
3.0 - I'm having a problem...
3.1 - Problems of "general" nature.
3.2 - Problems of "specific" nature.
3.3 - Problems with third-party add-ins.
[Note: Users have requested that we compile a "standard problem - solution"
list for inclusion in this section. I'll be keeping that as a
seperate FAQ.]
[Note: Sections are split with "******".]
Before we begin, I'd like to thank the following people not already
mentioned in the FAQ for their assistance in putting this together:
1092143@MAINE.maine.edu (Donna Foster)
a.baxter@ic.ac.uk (Alex D. Baxter)
blank@silver.ucs.indiana.edu (Doug Blank)
davec@wsti.demon.co.uk (David Churcher)
DimaA@aomicrosoft.msk.su (Dmitry Artemov)
Garrett@heidi.demon.co.uk (Garrett Trant)
kruckenb@sal.cs.utah.edu (Pete Kruckenberg)
OB71216@IBMH1.ORL.MMC.COM (Steve)
pgoudswa@etc.cln.bc.ca (Peter Goudswaard)
peace@world.std.com (Jeremy Stark)
russel@atl.sofkin.ca (Paul Russell)
tdh@dweebus.telemax.com (Thomas D. Halter)
tonemb@mtfs.unit.no (Tone Merethe Berg)
******
0.0 - What is an FAQ?
FAQ is short for "Frequently-asked-questions". Over the course of
the net, especially in the technical areas, a lot of questions get
asked over and over and over ("How do I get my foo to bar in green
instead of red?").
These questions get collected into a single message that is then
posted to the newsgroup at regular intervals (usually about once
a month).
In the case of c.d.x.f, there are about a half-dozen FAQ's floating
around in various stages. As I get approval to archive these at
> rtfm.mit.edu, I'll be including them in my postings.
FAQ's also tend to have a lot of background information about the
newsgroup in question, information about the newsgroup, historical
persons important to the newsgroup, and I've even seen some that
have court cases in them.
Basically, FAQ's are a lot of things for a lot of different people.
If you have an idea for an FAQ, write it up and mail it to me at
kcochran@nyx.cs.du.edu. I'll be more than happy to maintain the
FAQ for you or to accept updates as needed. You, of course, would
receive full credit for authorship.
******
0.1 - What is comp.databases.xbase.fox?
comp.databases.xbase.fox (or c.d.x.f for short) is a newsgroup for
discussion about the Fox database management packages. Technical
questions about Rushmore, the power tools, FoxBase, and other issues
are all relevant to c.d.x.f.
General questions that relate specifically to FoxPro or the related
products (NetLib, dGE, etc) or technical questions about these items
are certainly relevant to the newsgroup.
General questions about databases in general (I'm looking for a good
database package; How do I normalize my tables) should probably be
addressed in either comp.databases.xbase.misc or comp.databases.misc.
If you have a question of a general nature, you should also look
around the newsgroups list to see if there isn't a more relevant
group.
c.d.x.f is not an advocacy group; please do not start discussions
about whether your Mac is better than the next guys IBM box. Also,
you should avoid general slamming of products. A conversation about
the differences between the FoxPro and Paradox screen builders would
be extremly informative; a post stating that "Paradox Sucks" is in
poor taste.
******
0.2.1 - What are Foxbase, Foxbase+, and those other things?
The Fox database management packages are available for many
different operating systems and environments. The various
packages are:
Microsoft:
FoxPro 2.5 (DOS)
FoxPro 2.5 (Windows)
FoxPro 2.5 (Macintosh)
FoxPro 2.6 "Standard Edition" (DOS)
FoxPro 2.6 "Professional Edition" (DOS)
FoxPro 2.6 "Standard Edition" (Windows)
FoxPro 2.6 "Professional Edition" (Windows)
FoxPro 2.6 "Standard Edition" (Macintosh)
FoxPro 2.6 "Professional Edition" (Macintosh)
FoxPro 2.5 (Unix, to be released in 1994)
[Anybody know if this is going to be 2.5 or 2.6? Is there going
go be the Standard/Professional split?]
Fox Software*:
FoxBASE+ (DOS)
FoxBASE+ (Macintosh)
FoxPro 1.1 (DOS)
FoxPro 2.0 (DOS)
SCO (Santa Cruz Operation):
SCO FoxBASE+ (Unix)
*Fox Software has been bought by Microsoft. Their products are no
longer available, but are included here since many of their products
are still in use.
******
0.3 - How do I get information?
This depends on what sort of information you need. One of the best
places to get information is from the manuals. If they don't give
you what you want, there are a wide variety of magazines, books,
FTP sites, and comp.* groups that may be able to provide you with
the information you need.
******
0.3.1 - What other FAQ's are there?
Welcome To The Machine
(FAQ #0, archived at rtfm.edu under databases/foxpro/hello)
This FAQ contains a quick introduction to usenet etiquette,
pointers on how to compose posts, and pointers to some additional
newsgroups where you may be able to find information. Originally
written by Pete Kruckenberg, and maintened by Keith Cochran.
You Say You Want A Revolution:
(FAQ #1, archived at rtfm.edu under databases/foxpro/general)
This FAQ contains information of a general nature about c.d.x.f
It also contains address information for Microsoft, third-party
books about the Fox database management products, how to get
information from Microsoft, compuserve, and information about
FTP.
See Fox. See Fox Run. Run, Fox, Run:
(FAQ #2, archived at rtfm.edu under databases/foxpro/rushmore)
This FAQ contains information of both a general and a specific
nature about the Rushmore technology.
Things Your Mamma Never Told You About:
(FAQ #3, archived at rtfm.edu under databases/foxpro/misc)
This FAQ contains information about functions and commands in
FoxPro that "should" do something, but "don't", and those
commands that "shouldn't" do something, but "do".
Variations On A Theme:
(FAQ #4, currently in "development" stage)
I'm still collecting information on other database packages
vs FoxPro for this FAQ. If you have anything, contact me
at kcochran@nyx.cs.du.edu. Don't bother asking for this FAQ.
WHERE resource = onthenet
(FAQ #5, archived at rtfm.edu under databases/foxpro/resource)
This FAQ contains an exhaustive listing of FoxPro resources
available through the net. FTP sites, mailing lists, and
newsgroups are all covered. I'd like to extend my deepest
gratitude to Pete Kruckenberg (kruckenb@sal.cs.utah.edu)
for developing this listing.
SET LIBRARY TO
(FAQ #6, currently in "development" stage)
This FAQ contains information on third-party add-ons for
FoxPro such as the FoxFire! report writer, or the GPLib
shareware Netware library. If you'd like to include your
favorite add-in, mail a short description along with the
address/phone of the company to kcochran@nyx.cs.du.edu.
******
1.0 - I just bought FoxPro; now what?
The *FIRST THING TO DO* is to fill our your registration card,
and mail it off to Microsoft. This will give you the ability
to call Microsoft Technical Support with your problems.
Calling Microsoft support is a mixed blessing. It may get your
question answered, but you may have no hair left by the time it
works. Then again, MicroSoft support is _the place_ to make sure
that you are not working against a program bug.
******
1.1 - The FoxPro books.
One of the best places to find information is within the FoxPro books
that you got when you brought your package. The Language Reference
Manual is the first place you should look when a command doesn't work
the way you expected it to.
The Developer's Guide also has a lot of information on things that they
don't really mention in the language reference. If you are having
problems getting your procedures to work correctly in your screens,
try taking a look there.
******
1.2 - Third-Party books.
There are many, many books on how to develop and program in FoxPro.
Some of the ones you may find useful are:
[Note: Your milage may vary.]
peace@world.std.com (Jeremy Stark) recommends:
"FoxPro 2.5 Developing Full-Scale Applications For Windows"
Written by Nelson King, and published by MIS:Press.
"It's actually a beginners book and includes sections on
table normalization, project planning, and other topics related
to the consulting end of database design."
It comes with a disk, costs $34.95, and also has a cute fox on
the cover.
pgoudswa@etc.cln.bc.ca (Peter Goudswaard) recommends:
"FoxPro 2.5 - Programmer's Reference" by John Hawkins,
Editor-In-Chief of Data-Based Advisor Magazine, published
by Que, ISBN 1-56529-210-3.
"Programming FoxPro 2.5" by Miriam Liskin, by Ziff-Davis Press,
ISBN 1-56276-164-1.
tonemb@mtfs.unit.no (Tone Merethe Berg) Recommends:
Using FoxPro 2.5 for Windows, by Lisa Slater and Steven Arnott.
ISBN 1-56529-002-X.
"This is an excellent book for people like me, starting close to
zero, as well as for some like me, getting closer to 'experienced'.
As for you guru's, I guess it isn't too bad, either."
FoxPro 2.5 Advanced Developers Handbook. Brady Publishing, 1993.
ISBN 0-13-325341-4. According to the author, it includes
"undocumented secrets, strategies, and tips from the experts, and
is especially written for those developing applications for a
network. Data security and corruption protection, as well as
error-handling, user-interfaces, UDF-creation and other programming
techniques are main chapters."
******
1.3 - Database and FoxPro magazines.
In addition to the books available, there are several magazines that
deal with xbase products, and some that deal exclusivly with FoxPro.
FoxPro Advisor:
Advisor Communications International, Inc.
(The same people that do Data Based Advisor, Clipper Advisor,
dBase Advisor and Access Advisor).
Published monthly. $4.95/issue, or yearly subscription for $65.00
FoxPro Advisor Subscription Dept
PO Box 469032
Escondido CA 92046
(800) 336-6060
FoxTalk Magazine:
FoxTalk
Pinnacle Publishing, Inc.
PO Box 888
Kent, WA 98035-0888
COMPUSERVE Address: 72600,140
Editorial Hotline: (800) 788-1900
BBS (2400) (206) 251-6217
BBS (9600) (206) 251-6218
As of March, 1993 the numbers for Pinnacle Publishing are:
Pinnacle Publishing
18000 72nd Avenue South Suite 217
Kent, WA 98032
Shipping and Receiving:
18030 72nd Avenue South
Kent, WA 98032
Mailing Address:
PO Box 888
Kent, WA 98035-0888
Phone Numbers:
General Line: (206) 251-1900
(Weekdays 8am - 5pm PACIFIC time)
Sales: (800) 788-1900
Fax: (206) 251-5057
Tech Support: (206) 251-3513
(Weekdays 8am - 5pm PACIFIC time)
BBS: (206) 251-6218 (9600 Baud)
(206) 251-6217 (2400 Baud)
They can also be reached on Compuserve by GO PINNACLE.
The Pinter FoxPro Letter.
24 pages, published monthly by Les Pinter, author of at least
5 books on FoxPro. You can reach him on compuserve at 76434,104.
If anybody gets any info (like pricing, mailing address, etc),
could they drop me a line with it so I can include it here?
******
1.4 - Microsoft technical support.
Microsoft technical support is available from 6am to 6pm pacific
time monday through friday, except for holidays. In the US, call:
(206) 635-7191 (FoxPro/DOS and FoxPro/Windows)
(206) 635-7192 (FoxPro/Macintosh)
In Canada, support engineers are available at (905) 568-3503.
Microsoft FastTips is available 24 hours a day, 7 days a week at
(800) 936-4300 with a touch-tone phone. You can receive automated
answers to common questions and problems, or access a library of
technical notes, all delivered by recording or fax.
Microsoft can also be reached via compuserve. Their "wish line"
on the net is foxwish@microsoft.com
******
1.5 - FTP locations.
You can FTP anonymously to microsoft.com, and look in the directory
/developer/devtools/fox for support and patch files, upgrade
information, and other stuff. The IP address is 198.105.232.1
******
1.6 - Other sources of information.
COMPUSERVE: At any ! prompt, type "go microsoft" to access the
Microsoft forums, "go mskb" to access the Microsoft Knowledge Base,
or "go foxforum" to access FoxPro specific information.
There is an existing FoxPro mailing list:
To subscribe to the FoxPro mailing list, send the following in a
mail message to fileserv@polarbear.rankin-inlet.nt.ca:
JOIN FOXPRO-I kcochran@nyx.cs.du.edu
QUIT
[Note that you would use your e-mail address to subscribe, not
mine.]
[Note: That's "I" as in "GHIJ", not "1" as in "1234". You can
also get a digest version of the list by doing a JOIN FOXPRO-D
instead of JOIN FOXPRO-I.
To get help for this mailing list, send email to
foxpro-help@polarbear.rankin-inlet.nt.ca. The subject and message
are unimportant. You can also contact the list administrator at
coneill@polarbear.rankin-inlet.nt.ca. Responses may take 48-72
hours because polarbear is on a daily dial-up connection.
And there may be a second list forming:
foxpro-l@ukanvm.cc.ukans.edu
For information on subscribing, send email to LISTSERV@UKANVM.BITNET
with "HELP" as the first word of the message to receive a help file.
If anybody has any additional information on mailing lists or
FTP sites, please contact me.
The BCNN FoxPro electronic newsletter is published monthly in
> comp.databases.xbase.fox. Subscriptions are free, and the
information on how to subscribe is included at the bottom of
each newsletter.
******
2.0 - What are the parts of FoxPro?
There are many different parts to FoxPro, even within FoxPro itself.
Just because you have a compiled application doesn't mean that it will
work correctly. For example, if your application uses printer drivers,
then you will have to include genpd.app as part of your project.
Some of the other external parts of FoxPro are:
genscrn.prg - Generates your .spr file from the screen database.
genmenu.prg - Generates your .mpr file from the menu database.
beautify.app - Used to beautify applications brought over from other
platforms. It is not yet available for the DOS platform.
foxdoc.app - Documentation generator. This is known as foxdoc.exe
in the DOS platform.
gengraph.app - Graph generator.
spellchk.app - Spell checker.
genxtab.prg - Generation cross-tabulations from a database.
transport.prg - Used to migrate applications across platforms.
******
2.1 - The Developers kit.
This is the "best known" of the FoxPro parts. This the set that
gives you the "command window", and allows you to create applications,
databases, compile them, etc.
******
2.2 - The Distribution kit.
In order to run a FoxPro application, you have to have FoxPro, right?
Wrong. Instead of forcing everybody to spend the $$$ to buy the
development kit just so they can run their accounting software, you
can purchase the Distribution Kit.
The distribution kit allows you to distribute and run an application
without providing the full FoxPro interface (command window, filer,
etc). This distribution is done ROYALTY-FREE. Once you have brought
the distribution kit, and compiled your executable, you do not have
to pay MicroSoft anything in order to sell your application to
another person.
Note that the Distribution Kit does not actually compile your
FoxPro code into machine language. Instead, it produces an .EXE
file containing a copy of the FoxPro interpreter and your program
compiled into pseudo-code.
******
2.3 - The Library Construction kit.
Found something that FoxPro won't do? Want it to be able to do it?
Purchase the Library Construction kit, and teach FoxPro new tricks!
The LCK allows you to write your own functions in C, and then link
them into FoxPro as a .plb file. The functions have _NONE_ of the
limitations of .bin files (used by LOAD and CALL), and can take
full advantage of FoxPro's memory management, windowed i/o, and
other features. You can even call FoxPro commands from within
your external function.
The LCK covers DOS and Windows platforms (Windows files have the
extension .fll instead of .plb). A C compiler is not included.
The supported C compilers are Microsoft C v8 and Watcom C v8.5. It
is possible to use Borland C++ v3.1 to produce Windows .FLL files,
but this is not officially supported.
******
2.4 - The Connectivity kit.
What's that? Human Resources has 10 years of information stored on
the server in SYBASE format, and they want you to analyze it? With
the connectivity kit, this is no problem. Just attach to the server,
log yourself into the database, and start analyzing.
The connectivity kit comes in two "flavors". DOS and Windows.
The DOS version is a .plb file that allows you to attach to Sybase
and Oracle servers. No other servers are supported. The Windows
.fll driver allows you to connect via ODBC to a wide range of
database servers.
In order to use the Windows version, you must also buy the ODBC
Desktop Drivers from Microsoft.
Data access is performed by using a CK function to register yourself
to your data source, and then using other CK functions to pass and
retrieve SQL statements to the server.
*****
2.5 - FoxPro 2.6 "Standard Edition"/"Professional Edition"
Versions of FoxPro prior to 2.6 came in many different "sections"
(described above). FoxPro/MAC 2.5, and FoxPro/DOS 2.6, and
FoxPro/Windows 2.6 only come in two "flavors". These are:
Standard Edition: This contains what used to be called the
Development Kit.
Professional Edition: This contains:
Development Kit
Distribution Kit
Library Construction Kit
Connectivity Kit
Windows for WorkGroups Extensions (FP/WIN only)
Also, the "Standard Edition" and "Professional Edition" only
come as one license/package. No bundling.
******
3.0 - I'm having a problem...
Join the club. Fortunatly, the kind folks of c.d.x.f will be more
than happy to help solve your FoxPro problems.
SOME RULES TO MAKE YOUR LIFE EASIER:
(1)Please be sure to mention what VERSION and ENVIRONMENT of Fox*
you are using. Some of the things you can do in FoxPro 2.5
will not work at all under FoxBase+, or on the Unix flavors.
(2)Please be sure to mention anything odd that you are doing.
Specifically, .plb files and SQL tends to cause "strange"
things to happen. If you have the files in a project, please
be sure to mention that. If you are using the distribution kit,
and the problem only appears when you are running it under the
distribution kit, please mention that.
IF YOU ARE MIGRATING AN APPLICATION FROM ANOTHER XBASE PRODUCT,
MENTION IT!
(3)Do _NOT_ end your question with "Please e-mail me the answer,
as I don't read this newsgroup". I mention this for a couple
of reasons:
(1)Not everybody has the ability to cc: people on postings.
The problem you are having may be the same problem that
many other people are having.
(2)The problem that I have next week is something that you
might be able to solve for me in an instant. I don't think
it's really fair for you to get help from us if we have no
chance of getting help from you.
******
3.1 - Problems of "general" nature.
These problems are generally of a "how do I..." nature, and are probably
most quickly solved by reading the manual. I cannot emphasis enough
that the manuals and on-line help should be your first defense against
problems.
For example, we recently had a poster ask "how do I generate a random
number between x and y?" This problem can be solved by looking at
the RAND() function in the Language Reference Manual.
******
3.2 - Problems of "specific" nature.
If you've got specific problems, please be sure provide enough detail
with your post to allow us to help you. Code samples are always
nice, as is a short (or long) description of what it is you are
trying to do. If you have databases linked with SET RELATION, please
be sure to mention this.
******
3.3 - Problems with third-party add-ins.
Probably the best place to solve problems with .plb files is with
the company that produces it. But you may be able to get better
response by fishing in c.d.x.f
[This is version 1.0.0.2, last updated 07/03/94. New or altered text
is marked with ">" in the left hand column. Please send all comments,
suggestions, and whatnot to kcochran@nyx.cs.du.edu]
One of the most my mysterious things about FoxPro is the Rushmore
Technology. This FAQ deals with Rushmore, and how to use it to get
every last ounce of power out of your databases.
This FAQ is organized in the following manner:
0.0 What is Rushmore?
0.1 What isn't Rushmore?
0.2 Why is it called Rushmore?
1.0 How do I turn on Rushmore?
1.1 Where can I utilize Rushmore?
1.2 Where can't I utilize Rushmore?
1.3 How do I turn off Rushmore?
2.0 Simple indexes and Rushmore.
2.1 Compound indexes and Rushmore.
2.2 Complex indexes and Rushmore.
3.0 Using functions in indexes.
3.1 Using user-defined functions in indexes.
3.2 Using functions from .plb files in indexes.
4.0 What is an "optimizable expression"?
4.1 Fully optimizable expressions.
4.2 Partially optimizable expressions.
4.3 Non-optimizable expressions.
5.0 Rushmore and the SEEK statement.
5.1 Rushmore and the LOCATE statement.
5.2 Rushmore and the SET ORDER TO statement.
5.3 Rushmore and the SET RELATION TO statement.
5.4 Rushmore and the SET DELETED statement.
[Note each of these sections is seperate with "******"]
******
0.0 What is Rushmore?
The "simple" answer: Rushmore is this little bit of magic that allows
you main-frame database access speeds on a lowly PC.
The "more complex" answer: Rushmore is a data-access method that utilizes
binary selection critera and better index-manipulation methods to allow
faster resolution of searches.
[If you want to know what the "more complex" answer is really saying,
take a graduate course in database programming.]
The "correct" answer: Rushmore is a mountain in South Dakota which has
been carved into the faces of several presidents. :]
******
0.1 What isn't Rushmore?
Rushmore has nothing to do with satanism.
Rushmore has nothing to do with the power tools.
Rushmore has nothing to do with your report layouts.
Rushmore has nothing to do with your mouse or keyboard.
******
0.2 Why is it called Rushmore?
Oddly enough, the design team came up with the "code-name" Rushmore
after spending a night watching the movie "North By Northwest."
******
1.0 How do I turn on Rushmore?
You don't. Any time you can include a FOR clause in a statement,
Rushmore will try to optimize the expression.
Some exceptions apply. For example, Rushmore will not activate if
you have a statement with a WHILE clause in it.
Rushmore works best with .CDX indexes, but it will utilize any open
.IDX or compact .IDX indexes that it can get its greedy little hands
upon.
******
1.1 Where can I utilize Rushmore?
You can utilize Rushmore in any FoxPro statement that allows a FOR
clause, or in an SQL statement. If you are dealing with databases
of any size, you should utilize Rushmore as often as possible.
Note: The only way to utilize Rushmore when doing multi-database
access is through the SQL SELECT statement.
******
1.2 Where can't I utilize Rushmore?
Basically, if you can't include a FOR clause, you can't use Rushmore.
Rushmore also can't be used if you have a WHILE clause in your statement,
or if you are doing a LOCATE on the child table in a multi-table
relation.
Note that SEEK and GOTO do not utilize Rushmore.
******
1.3 How do I turn off Rushmore?
In some rare instances, you may want to turn off Rushmore so that it
doesn't try to optimize your expression.
In order to do so there are two methods:
SET OPTIMIZE ON|OFF - This turns Rushmore on/off until the next SET
OPTIMIZE statement is executed. It is probably not a good idea to
use this statement.
There is another way to disable Rushmore. Any statement that can
utilize Rushmore has a NOOPTIMIZE clause. This clause will disable
Rushmore for that statement. Note that if you have a multi-line
statement, such as:
SELECT db1
LOCATE FOR foo=bar NOOPTIMIZE
WHILE FOUND()
SELECT db2
LOCATE FOR date1 = m.mydate
WHILE FOUND()
[...]
CONTINUE
ENDWHILE
SELECT db1
CONTINUE
ENDWHILE
Rushmore will be disabled for the db1 LOCATE, but will be active for
the db2 LOCATE.
NB: Be very wary of using GOTO, LOCATE, SEEK, SKIP or any other command
that may move the record pointer (like APPEND, or SQL - SELECT) in any
databases that are linked using SET RELATION TO. You may not like the
results.
******
For the following discussions, we have the following database structure:
fname C(15)
minit C(1)
lname C(18)
dob D
ssn N(9,0)
******
2.0 Simple indexes and Rushmore.
A simple index is of the form:
INDEX ON ssn TAG ssn
This is the type of index that Rushmore likes using the "best". In
order to utilize Rushmore with this type of tag, all you have to do
is:
LOCATE FOR ssn = 987654321
Simple indexes are generally only built on numeric, date, or
formatted character fields. For more information on why this is
so, see sections 2.2, 3.0, and 4.0.
******
2.1 Compound indexes and Rushmore.
A coumpound index is of the format:
INDEX ON lname+fname TAG name
In order to utilize this type of tag with Rushmore, you have to:
LOCATE FOR lname+fname = "Cochran Keith"
What's that? You want to know why you wouldn't use:
LOCATE FOR name = "Cochran Keith"
Well, there's a reason for that, and it's even a good one. The TAG
parameter is for your usage. Rushmore understands expressions, not
tags.
In order to get Rushmore to work, the expression on the left side of
the expression must match in essence the expression of the INDEX ON
statement. So, the following are things that Rushmore can't utilize
with our current INDEX statement:
LOCATE FOR UPPER(lname+fname) = "COCHRAN KEITH"
LOCATE FOR LTRIM(lname)+fname = "COCHRAN KEITH"
LOCATE FOR lname+" "+fname = "Cochran Keith"
For a discussion of how to correctly utilize Rushmore with functions,
see sections 2.2 and 3.0.
NB: Special care must be taken when creating compound or complex indexes
with numeric and date fields. For more information, see the INDEX ON
section in the FAQ "Things your Mamma never told you".
******
2.2 Complex indexes and Rushmore.
A complex index is any index that uses math, string, or other functions
as part of the index. Some examples:
INDEX ON DTOS(date) TAG cdate
INDEX ON lname+", "+fname TAG fullname
INDEX ON STR(ssn) TAG cssn
INDEX ON ssn+DAY(date) TAG mytag
In order to get Rushmore to work with these indexes, the index expression
must match the expression you are locating on.
******
3.0 Using functions in indexes.
As you've seen from the preceeding section, you can utilize any FoxPro
function in your index. The question as far as Rushmore is concerned
is - should you?
In most cases, the answer is yes. The caveat here is that when you're
designing your database, you need to be aware of the trade-off between
getting better speed through Rushmore, and taking longer to update your
indexes when you change or add records.
The other major pitfall with using functions in your indexes is how you
solve for the solutions later. Most people, if they have an index on
UPPER(lname+fname), and two input fields, m.last and m.first, will
attempt to:
LOCATE FOR UPPER(lname+fname) = UPPER(m.last+m.first)
This will work, and Rushmore will optimize it, but you won't see any
real speed increase. The reason for this is because the
UPPER(m.last+m.first) is evaluated for EVERY RECORD in the database.
In order to properly utilize this index, you should:
m.search = UPPER(m.last+m.first)
LOCATE FOR UPPER(lname+fname) = m.search
******
3.1 Using user-defined functions in indexes.
Rushmore is able to utilize FoxPro functions in index expressions,
and it is also able to utilize user-defined functions (udf's) in
its optimization process. There are several things you have to be
aware of, though:
1) The speed that Rushmore can process is limited by how fast your
function executes.
2) Be extremly careful about what your function does. Your function
should make no guesses about the current operating environment, the
value of SET EXACT, SET ORDER, SET RELATION, etc.
3) Your function ***MUST NOT*** modify any databases. Doing so can
cause everything from "something strange is happening" to "FoxPro
must be buggy - it gets stuck in an endless loop."
4) Be extremly careful about any variables you function may modify.
It's extremly easy to get the "wrong" result when your function
modifies one of your search variables.
5) Your function ***MUST NOT*** move the record pointer in any database
hooked into the database you're using with SET RELATION. It ***MUST
NOT*** move the record pointer in the current database.
******
3.2 Using functions from .plb files in indexes.
As long as the function in the .plb is "well behaved", there should be
no problems using it. Remember the points in section 3.1, though.
******
4.0 What is an "optimizable expression"?
An optimizable expression is any expression that Rushmore can attempt
to use. How well Rushmore can work with the expression determines if
the expression is fully, partially, or non-optimizable.
All of the examples used up to now were either fully optimizable, or
non optimizable. Expressions that may be partially optimizable generally
take the format of:
LOCATE FOR lname = "Cochran" AND ssn = 987654321
******
4.1 Fully optimizable expressions.
In order for our last LOCATE statement to be fully optimizable, we
would have to:
INDEX ON lname TAG lname
INDEX ON ssn TAG ssn
This is the "best" solution, and will allow Rushmore to find the records
the fastest.
******
4.2 Partially optimizable expressions.
If we had the index on ssn, but no index on lname, then our expression
would partially optimizable. Rushmore would activate to locate the
records which matched our ssn, and then treat the rest of the expression
as a non-optimizable search. Note that Rushmore is smart enough that
it will solve for the optimizable portions first, and then perform
the rest of the search on the subset of records it already has.
******
4.3 Non-optimizable expressions.
A non-optimizable expression is one that Rushmore can't help. You want
to avoid these expressions in all but the most extreme cases. The
reason is that FoxPro will search every record in the database,
starting at RECNO() = 1.
******
5.0 Rushmore and the SEEK statement.
Basically, the SEEK statement, and the SEEK() function don't interact
with Rushmore at all. This can be both a blessing and a curse. For
simple indexes, you can get faster results out of SEEK than you
can out of Rushmore. But SEEK will not allow you to search on
multiple fields...
5.1 Rushmore and the LOCATE and SCAN statements.
Rushmore will almost always speed up your queries when using LOCATE FOR
or SCAN FOR statements. To get the best use of Rushmore in these
statements, you should build simple indexes on the fields you will
most often search through.
5.2 Rushmore and the SET ORDER TO statement.
[Many thanks to Evan Simpson (evan@access.digex.net) for helping clear
up a misconception about the SET ORDER TO statement for me.]
(1)The speed of the search will be slower. This is true whether you
are using Rushmore or not.
(2)The first record Rushmore locates (i.e. LOCATE FOR foo = "bar")
will be the lowest numbered record in the database [RECNO()] that
matches the search criteria, regardless of the SET ORDER TO clause.
For example, let's assume we have:
RECNO() FOO BAR
1 AAA BBB
2 AAA CCC
3 AAA DDD
4 AAA CCC
If you:
SET ORDER TO BAR
LOCATE FOR bar = "CCC"
Rushmore will locate RECNO() 2, and then RECNO() 4.
If you:
SET ORDER TO bar
LOCATE FOR foo = "AAA"
Then Rushmore will locate records in the following order:
RECNO() 1
RECNO() 2
RECNO() 4
RECNO() 3
Of course, you shouldn't program with this in mind, because Microsoft
may change it in future releases.
5.3 Rushmore and the SET RELATION TO statement.
Beware of attempting to use Rushmore along with SET RELATION. Due
to the constraints of the SET RELATION statement, Rushmore will
either not work at all, or will only work in very limited cases.
5.4 Rushmore and the SET DELETED statement.
Rushmore can optimize a query for deleted() IF you index on deleted().
If your database contains a large number of deleted records, you
can help Rushmore out by either indexing on deleted(), or by using
the SET DELETED OFF statement before you invoke Rushmore.
WHAT'S IN THIS FAQ:
Abnormal Program Termination in Extended FoxPro
kruckenb@sal.cs.utah.edu (Joseph Kruckenberg)
Diagonal Lines In FoxPro/Windows
blank@silver.ucs.indiana.edu (Doug Blank)
Generating Complex Indexes On Numeric Fields
Getting Rid Of The Microsoft FoxPro Screen And Title
Outer Joins In FoxPro
davec@wsti.demon.co.uk (David Churcher)
Source Code Wanted - Only Singles Need Apply
martin@convext.csd.uwm.edu (Martin A. Miller)
Unsupported Trick To Get Blank (Not Zero) Fields
wsd@world.std.com (Rorschach)
Writable SQL Cursors!
lotridge@charlie.ccd.bnl.gov (Charlie Lotridge)
*****
Abnormal Program Termination in Extended FoxPro
kruckenb@sal.cs.utah.edu (Joseph Kruckenberg)
So, you're running along in the Extended Version of FoxPro when all
of a sudden you see:
abnormal program termination: page fault. cs:eip=000ch:0007791fh
(Note: cs:eip may point to pretty much anywhere. If you don't know
386 assembler, don't worry about what the numbers mean.)
Now what? You can fire FoxPro back up and hope and pray that it doesn't
happen again, or you can add the following line to your AUTOEXEC.BAT
file:
SET FOXPROX=-saveregs
(Note: No spaces between the equals and minus signs.)
This command tells FoxPro to preserve any registers in use and not to
overwrite them while running (given the limited explanation I recieved).
*****
Diagnoal Lines In FoxPro/Windows
blank@silver.ucs.indiana.edu (Doug Blank)
Is there any way to draw lines that are neither horizontal or vertical in
FoxPro? I am trying to make line graphs from data without using Microsoft
Graph. Any ideas?
Yes, it is sad but true: you cannot draw a diagonal line. I did try
dropping down to the windows API, and you can in fact draw any thing
that you want in the fox window --- but Fox doesn't "know" about it.
Therefore, if you close the window and reopen it your line is gone.
Any time that you cover your line, it won't be redrawn.
So, I finally ended up with the solution below. It does a pretty good
job on arbitrary lines. You may have to adjust x and y dotsize. These
parameters exist because of translation problems from real-valued
points to screen coordinates (welcome to the world of GUI's!)
To use, call with:
=drawline(1,5,11,30,.T.) && to produce a color line from @ 1,5 to 11,30 or
=drawline(1,5,11,30) && to produce a black line
Using this method, you can draw circles, splines, etc. Put the
function below in your program, or comment out the first line and
place in a file named DRAWLINE.PRG. It's not real fast nor smooth,
but it works. You probably can't make the line any thinner due to
related problems with real-valued vs. screen coordinates, so pensize
and penlength probaly can't be changed. You can change the RGB()
funtion to make any colors you want, or even add a CASE statement to
do them all, add shadows, etc.
FUNCTION drawline
PARAMETER x1,y1,x2,y2,color
PRIVATE x,y,B,slope
#DEFINE xdotsize (.2)
#DEFINE ydotsize (.5)
#DEFINE pensize (3)
#DEFINE penlen (.7)
IF m.y1 = m.y2 && vertical line
IF x1 < x2
IF color
@m.x1,m.y1 to m.x2,m.y1 pen pensize color ;
RGB(0,255,0,255,255,255) style "T"
ELSE
@m.x1,m.y1 to m.x2,m.y1 pen pensize color ;
RGB(255,0,255,255,255,255) style "T"
ENDIF
ELSE
IF color
@m.x2,m.y1 to m.x1,m.y1 pen pensize color ;
RGB(0,255,0,255,255,255) style "T"
ELSE
@m.x2,m.y1 to m.x1,m.y1 pen pensize color ;
RGB(255,0,255,255,255,255) style "T"
ENDIF
ENDIF
ELSE
m.slope = (m.x1 - m.x2)/(m.y1 - m.y2)
m.B = m.x1 - (m.slope * m.y1)
IF ABS((m.x1 - m.x2) / xdotsize) > ABS((m.y1 - m.y2) / ;
ydotsize)
FOR m.x = m.x1 TO m.x2 STEP xdotsize * ;
IIF( m.x1 > m.x2, -1, 1)
m.y = (m.x - m.B) / m.slope
IF color
@m.x,m.y to m.x,m.y+penlen pen ;
pensize color RGB(0,255,0,255,255,255) ;
style "T"
ELSE
@m.x,m.y to m.x,m.y+penlen pen ;
pensize color RGB(255,0,255,255,255,255) ;
style "T"
ENDIF
ENDFOR
ELSE
FOR m.y = m.y1 TO m.y2 STEP ydotsize * IIF( m.y1 > ;
m.y2, -1, 1)
m.x = (m.slope * m.y) + m.B
IF color
@m.x,m.y to m.x,m.y+penlen pen ;
pensize color RGB(0,255,0,255,255,255);
style "T"
ELSE
@m.x,m.y to m.x,m.y+penlen pen ;
pensize color RGB(255,0,255,255,255,255) ;
style "T"
ENDIF
ENDFOR
ENDIF
ENDIF
RETURN
*****
Generating Complex Indexes On Numeric Fields
There's an interesting "feature" that the FoxPro manuals don't tell
you about in the information on indexes. Let's say you have a database:
ACCOUNT N(6,0)
SSN N(9,0)
On first glance, if you wanted to sort the database by social security
number, and then account, you can just:
INDEX ON SSN+ACCOUNT TAG myorder
SET ORDER TO myorder
This, of course, doesn't work. What happens is that FoxPro just adds
the values together, causing:
SSN = 076541111 ACCOUNT = 999999 (Key value = 77541110)
To appear AFTER
SSN = 076541122 ACCOUNT = 000333 (Key value = 76541455)
Note: Microsoft assures me that this problem doesn't occur if you are
working with N(x,y > 1) fields, date fields, or logical fields.
What can you do to sort properly? There are several schools of thought:
(1)You can add a digit after the decimal point. Microsoft assures me
that this will solve the problem.
(2)If you're working with fixed length fields, you can shift one set
of digits over so that your math is correct. In the above example,
you would want to:
INDEX ON ssn*1000000+account TAG myorder
(3)Convert the numerics into strings, and concatenate them:
INDEX ON STR(ssn)+STR(account) TAG myorder
or:
INDEX ON TRANSFORM(ssn,"#########")+TRANSFORM(account,"######") TAG myorder
*****
Getting Rid Of The Microsoft FoxPro Screen And Title
The first thing to do if you're tired of seeing "Microsoft FoxPro"
every time you start your application is to use the -T command line
option to prevent it from showing up. This looks like this:
FOX -T
If you're using FoxPro/Windows or FoxPro/MAC, and want to get rid of
the "Microsoft FoxPro" title in the bar of the main screen, you can
do several things. After your application starts, you can
MODIFY WINDOW ... TITLE "My Title"
(Anybody know what the window's called?)
and the window name will change to whatever your title is.
You can also put the following line in your config.fpw/config.fpm
file:
Title=My Title
Note the lack of quotes. This will cause the main window to be listed
as "My Title" as soon as FoxPro starts up. For some reason, there are
differences in the way this works depending on whether you are running
your application from the development kit or the distribution kit.
*****
Outer Joins In FoxPro
davec@wsti.demon.co.uk (David Churcher)
I give up, I RTFM (and I got FAQ'd) and did not find the syntax.
Using the foxpro Select command, I wish to join two or more tables
inclusivley. By this I mean :
To join Table A and B, if there is no join then include the
records from table A and place blanks in the fields from table B.
In previous versions of foxpro I would have used "Set relation to" and
it would have just happened.
Oh no, it's the dreaded Left Outer Join! This is an SQL construct which
FoxPro doesn't currently support, so you have to simulate it using a
UNION of two selects: one for all the records with matches in table B,
and one for all the records without. Here's an example:
SELECT a.keyfield, ;
a.datafield1, ;
b.datafield2, ;
b.datafield3 ;
FROM a,b ;
WHERE a.keyfield = b.keyfield ;
UNION ;
SELECT a.keyfield, ;
a.datafield1, ;
000.00, ;
000.00 ;
FROM a ;
WHERE a.keyfield NOT IN ;
(SELECT b.keyfield ;
FROM b)
Couple of points:
1. The numeric and string constants in the second SELECT (000.00 in this
example) have to exactly match the length of the fields in the second
database, because FoxPro requires both sides of a UNION to exactly the
same structure.
2. SET RELATION TO and SET SKIP TO may be faster and easier if it's only
a simple query.
****
Source Code Wanted - Only Singles Need Apply
martin@convext.csd.uwm.edu (Martin A. Miller)
There are two companies who provide software to generate source code
from compiled Fox* applications/programs.
1) Xitech Inc.
Toledo, Ohio (407) 292-8629; FAX: (407) 292-8652
Product name: ReFox
Restores FoxBASE, FoxBASE+, FoxPro 1.x, FoxPro 2.0,
FoxPro 2.5 (including Windows).
Cost: $299 + S&H
2) HILCO Software
Sebastopol, CA (707) 829-5011; FAX: (707) 829-5710
Product Names: dCRYPTR for dBASE III Run-Time
DECODE for dBASE II Run-Time
deFOX for FoxBase II (early dBASE II compatible)
OutFOX for Foxbase+
Cost: $149.95 + $5.00 S&H
In addition, Ron Talmadge made me aware of the following:
Frx2Prg Version 2.5
Have it your way with FoxPro Reports
Rory Data International
17 Thorburn Road
North Potomac, MD 20878
Phone: (301) 251-0497
BBS: 301-251-9206
FAX: 301-258-6862
CIS: 73765,121
Frx2Prg is a utility that translates a FoxPro 2.0 or 2.5 report
format (.FRX) file into a corresponding program (.PRG) file.
*****
Unsupported Trick To Get Blank (Not Zero) Fields
wsd@world.std.com (Rorschach)
I been pulling my hair out for hours trying to figure this out. Is is
possible to exclude records from an average that are blank?
DOCUMENT:Q97647 14-DEC-1993 [B_WFOXPRO]
TITLE :INF: How Exclude Blanks, but Not Zeros, from an Average
PRODUCT :FoxPro For Windows
PROD/VER:2.50 2.50a | 2.00 2.50 2.50a
OPER/SYS:WINDOWS | MS-DOS
KEYWORDS:
--------------------------------------------------------------------
The information in this article applies to:
- Microsoft FoxPro for Windows, versions 2.5 and 2.5a
- Microsoft FoxPro for MS-DOS, versions 2.0, 2.5, and 2.5a
--------------------------------------------------------------------
SUMMARY
=======
FoxPro's AVERAGE command sums numeric fields and divides the summed result
by the number of records summed. In some cases, you may want to determine
the AVERAGE only for fields that are not blank. Since there is no command
in the FoxPro language that can distinguish between a numeric field that is
blank and one that contains a zero, you must write a user-defined function
similar to the one below in order to accomplish this task.
MORE INFORMATION
================
The following function requires two parameters, the database name and field
name. An example of calling this function is as follows:
ave = ave_nobl("test","num")
The above command shows "test" as the name of the database file and "num"
as the numeric field to be averaged.
Sample Code
-----------
FUNCTION ave_nobl
PARAMETERS dbfname,fld_name
PRIVATE blank,skipbytes,i,numofblanks
skipbytes=0
numofblanks=0
IF USED(dbfname)
SELECT (dbfname)
ELSE
SELECT 0
USE (dbfname)
ENDIF
headersize = HEADER(dbfname)
no_records = RECCOUNT()
rec_size = RECSIZE()
fld_width = FSIZE(fld_name)
* Place the database structure information in an array to
* determine the field's position. The position is equal to
* the row number of the field in the array, which is returned
* by ASUBSCRIPT().
=afields(afld_pos)
fld_pos = ASUBSCRIPT(afld_pos,ASCAN(afld_pos,UPPER(fld_name)),1)
FOR i=1 TO (fld_pos-1)
skipbytes=skipbytes+FSIZE(FIELD(i))
ENDFOR
USE
blank = REPLICATE(" ",fld_width)
m.file = FOPEN(dbfname+".dbf")
IF m.file<0
RETURN "Error opening database "+dbfname+"."
ELSE
* The numeric field begins on the first byte following the
* header and any preceding fields (headersize+skipbytes+1).
m.move = FSEEK(m.file,headersize+skipbytes+1)
* Read the value of the numeric field and compare it to
* the variable blank.
m.num = FREAD(m.file,fld_width)
DO WHILE .NOT. FEOF(m.file)
IF m.num = blank
numofblanks = numofblanks+1
ENDIF
* Move to the beginning of the numeric field in the next
* record, read the next value, and compare it to the variable
* blank.
m.move = FSEEK(m.file,(rec_size-fld_width),1)
m.num = FREAD(m.file,fld_width)
ENDDO
m.move = FCLOSE(m.file)
USE (dbfname)
SUM EVAL(fld_name) TO sub_result
USE
* Divide the sum by the number of records that are not blank.
result = sub_result/(no_records-numofblanks)
* Return the result to the program that called ave_nobl().
RETURN result
ENDIF
Additional reference words: 2.00 2.50 2.50a null blank
=============================================================================
THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS
PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS
ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO
EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR
ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL,
CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF
MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION
OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES
SO THE FOREGOING LIMITATION MAY NOT APPLY.
Copyright Microsoft Corporation 1993.
*****
Writable SQL Cursors!
By Charlie Lotridge (lotridge@charlie.ccd.bnl.gov)
We've all had this problem: You go to extract some temporary
data from a few tables using a SELECT - SQL statement. You
set up the SELECT to output into a cursor so that you have
the flexibility and efficiency of a table without having to
be concerned about cleaning up after yourself. THen you decide
you'd like to add a record to this cursor or change a value in
it and BOOM! - "Cannot Write To A Read-Only File".
So what do you do? In one of their FastTips, Microsot suggests
that you first do your SELECT into an array, then create your
cursor with the same structure, and finally use the APPEND FROM
ARRAY command to move the data into the cursor. For example:
SELECT cust_name ;
FROM customers ;
INTO ARRAY temp
CREATE CURSOR cust_curs ;
(cust_name C(30))
SELECT cust_curs
APPEND FROM ARRAY temp
RELEASE temp
But this solution is less than ideal for at least two reasons
that I can think of. First, the cost in memory for the array
can be quite large if the SELECT - SQL statement generates a
lot of data.
The second reason is more substantial - you must know the exact
structure of the data being generated by the SELECT; both the
order of the fields and their respective sizes. This is at
best an inconvenience, since if you change the structure of any
of the source DBF's, you may also have to change the program
code, and at worst impossible if you're trying to write some
generalized routine which doesn't know much about the data
it is operating on.
[Question from the peanut gallery: Can't you COPY STRUCTURE TO
ARRAY, and then create your cursor from that array?]
So what's the solution? It's simple, really. I came upon this
idea when I was trying to change the alias of a cursor (don't
ask why).
At the temporary expense of an extra work area, you can rename
the alias of your cursor (or any open table for that matter) and
at the same time make it writable!!! For example:
PROCEDURE rename_table
PARAMETERS m.fromalias, m.toalias
* Open the table in another work area. *
USE (dbf(m.fromalias)) IN 0 ALIAS (m.toalias) AGAIN
* Close the old alias. *
USE IN (m.fromalias)
* And you're done! *
RETURN
And that's all there is to it. The beauty of this solution is that
your cursor's new alias has all the appearances of a regular DBF
(it shows up in all caps in the View Window, and you can even use
the SETUP button on it), yet it retains that most attractive quality
of a cursor - it goes away when you close it!
If the original alias or workarea of the cursor is important for some
reason, with a little extra work rename_table can be make to preserve
these characteristics with no loss of functionality.
***WARNING*** In some circumstances, the cursor you create is actually
***WARNING*** just a view of the table, not a seperate table in itself.
***WARNING*** In this case, appending, deleting, or altering records
***WARNING*** in your "cursor" will also alter data in the database.
[This is FAQ version 1.0.0.2 - Last Updated 10/27/94. New sections or
altered text are marked with ">" in the left hand column. Please send
all questions, comments, and whatnot to kcochran@nyx.cs.du.edu]
Before we begin, I'd like to extend my deepest gratitude to Pete
Kruckenberg (kruckenb@sal.cs.utah.edu) for collecting the information
found in this FAQ. If you find any mistakes in this FAQ, please let
Joseph know about them also.
======================================================================
Foxpro archives
---------------
Foxpro archives are available by using a File Transfer Protocol
program (usually called "ftp"). For help on retrieving files from
these sites, see "How to retrieve files from archive sites" below.
Please try to use the FTP site nearest you to conserve bandwidth.
SITE: lenti.med.umn.edu
IP ADDRESS: 128.101.81.1
DIRECTORY: /pub/foxpro
INDEX: /pub/foxpro/index
ADMIN: Gerald Skerbitz <gsker@lenti.med.umn.edu>
SITE: nstn.ns.ca
IP ADDRESS: 137.186.128.11
DIRECTORY: /pub/pc-stuff/foxpro
INDEX: not available at this time
ADMIN: Paul Russell <russell@atl.sofkin.ca>
SITE: ftp.microsoft.com
IP ADDRESS: 198.105.232.1
DIRECTORY: developer/devtools/fox
Changing to developer/fox.
INDEX: index.txt in each subdirectory
ADMIN: <csftpad@microsoft.com>
SITE: mercurio.univr.it (mirrors nstn, lenti, and rahul sites)
IP ADDRESS: 157.27.1.2
DIRECTORY: pub/msdos/foxpro
INDEX: pub/msdos/foxpro/00INDEX and pub/msdos/foxpro/index.txt
ADMIN: Germano Rossi <germano@chiostro.univr.it>
Mailing Lists
-------------
Polar Bear Heaven : (most active of the lists) Send email to
foxpro-help@polarbear.rankin-inlet.nt.ca to receive a help file
with instructions on how to subscribe, unsubscribe, and
additional mailing list options. The subject and message body
are not specified for this service--any messages sent to this
address will be replied to with the help file.
This mailing list is archived at ftp.rahul.net in pub/coneill.
Administrator: Chris O'Neill (coneill@polarbear.rankin-inlet.nt.ca)
(Note: replies may take up to 72 hours because of Polarbear's dial-up
connection to the Internet)
University of Kansas : send email to LISTSERV@UKANVM.CC.UKANS.EDU
(or LISTSERV@UKANVM.BITNET) with "HELP" as the first word of the
message. You will receive back a message containing instructions
on how to subscribe to or unsubscribe to the mailing list.
This list is archived at the List Server. The help file you will
receive explains how to retrieve information from the archive.
See "MORE INFORMATION" below for instructions on how to subscribe to
each of these mailing lists.
USENET Newsgroup
-----------------
comp.databases.xbase.fox is an unmoderated USENET newsgroup
currently receiving about 150-200 messages per week. A Frequently
Asked Questions list in several parts is posted regularly and is also
available from ftp.rahul.net as file foxfaq.zip. If your Internet
provider doesn't have this newsgroup, ask your system administrator
to add it to the groups your system receives.
Newsletter
----------
The Boston Computer Society publishes a free electronic Foxpro
newsletter monthly. This newsletter is posted to the USENET group
comp.databases.xbase.fox and is archived at ftp.rahul.net (filenames
bcnn*.zip). If you would like to receive the newsletter via email,
contact Les Squires at 73020.3435@compuserve.com. Unless email is
absolutely necessary (it costs money to mail from Compuserve), try
to get the newsletter from these other locations.
Technical Support
-----------------
Microsoft does not officially support Foxpro on the Internet, though
there are MS employees who are on the Polarbear mailing list, and they
do have an ftp archive (see above). The Foxpro Wish List is available
by email at foxwish@microsoft.com.
MORE INFORMATION
================
Subscribing to Foxpro mailing lists
-----------------------------------
To subscribe to the Polar Bear Heaven mailing list, send email to
fileserv@polarbear.rankin-inlet.nt.ca with the line
JOIN FOXPRO-I Your Full Name (substitute your name here)
to join the interactive list (messages sent as they are posted), or
JOIN FOXPRO-D Your Full Name
to join the digested list (messages are compiled and only sent
periodically).
To post a message to the Polar Bear Heaven mailing list, send it to
FOXPRO-L@polarbear.rankin-inlet.nt.ca
To subscribe to the University of Kansas mailing list, send email to
LISTSERV@UKANVM.CC.UKANS.EDU (or LISTSERV@UKANVM.BITNET) with the line
SUBSCRIBE FOXPRO-L Your Full Name (substitute your name here)
To post a message to the University of Kansas mailing list, send it to
FOXPRO-L@UKANVM.CC.UKANS.EDU (or FOXPRO-L@UKANVM.BITNET)
After subscribing to either of these mailing lists, you will receive
a response confirming your subscription to the mailing list and
explaining how to properly use the mailing list. The mailing list will
send messages to the email address you sent the subscription request
from.
Remember not to send mailing list service requests (subscribes,
unsubscribes) to the posting address. Doing so wastes a lot of time,
money, and other resources, and usually upsets a lot of people who
don't want to read your "SUBSCRIBE FOXPRO-L John Doe" requests.
How to retrieve files from archive sites
------------------------------------------
All of the Foxpro archive sites use the File Transfer Protocol to
upload and download files. The program that you will use to do this
is usually called "ftp". To access an FTP site, start ftp with the
name or IP address of the site as a command-line parameter (eg "ftp
ftp.rahul.net" or "ftp 192.160.13.1").
Once connected, you will be asked for a login ID. Use "ftp" or
"anonymous" as your login ID, then your full email address (eg
"joebob@xyz.com") as your password. To list a directory, use the "ls"
command; to change to a directory, use the "cd" command (eg "cd
/pub/coneill"). Before retrieving a file, you should usually turn on
the binary transfer mode using the "bin" command. Then, use the "get"
command to retrieve a file (eg "get index.txt"). For help, use the
"?" or "help" command. Finally, to exit ftp, type "quit" or "bye".
--